package com.itheima.reggie.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.reggie.dto.DishDto;
import com.itheima.reggie.entity.Dish;
import com.itheima.reggie.entity.DishFlavor;
import com.itheima.reggie.mapper.DishMapper;
import com.itheima.reggie.service.DishFlavorService;
import com.itheima.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import sun.dc.pr.PRError;

import java.util.List;

@Service
@Slf4j
public class DishServiceImpl extends ServiceImpl <DishMapper,Dish> implements  DishService{
    @Autowired
    private DishFlavorService dishFlavorService;
    @Override
    @Transactional
    public void saveDishAndFlavor(DishDto dishDto) {

        //1: 保存菜品基本信息
        save(dishDto);
        // 此处正是在 service 中进行的 所以可以直接save

        //  因为底层 搞属性 用的是 set  get 方法
        // 这个 菜品信息id是新增的
        List<DishFlavor> flavors = dishDto.getFlavors();
        if (flavors!=null&&flavors.size()>0){
            for (DishFlavor flavor : flavors) {
                flavor.setDishId(dishDto.getId());
            }
        }

        //dishDto中 已经定义了 flavor

        //菜品口味信息
        //前端传过来的是菜品口味 ,  信息里面没有菜品id
        //  遍历菜品口味列表   为菜品口味 加上菜品 id

        // 如果 菜品口味不为空 且长度大于0  说白了就是 有口味

        //mp中有一个批量添加方法
        dishFlavorService.saveBatch(flavors);
    }


    //菜品修改业务之   回显数据
    @Override
    public DishDto  getByIdWithFlavor(Long id) {
        //new出 给前端的类   dishdto
        DishDto dishDto = new DishDto();
        //查出  Dish表中数据
        Dish dish = getById(id);
        //把dish中的东西复制给dishdto
        BeanUtils.copyProperties(dish,dishDto);
        //还差  DishFlavor数据
        //  查询口味信息   创建条件构造器
        LambdaQueryWrapper<DishFlavor> wrapper = new LambdaQueryWrapper<>();
        //给wrapper赋予条件 ,,将口味表中的 菜品id 和 前端传来的id 相等
        wrapper.eq(DishFlavor::getDishId,id);
        //最后 条件查询所有  查到了所有的口味
        List<DishFlavor> flavors = dishFlavorService.list(wrapper);
        //  已经查到了   该赋值给  dishdto
        dishDto.setFlavors(flavors);

        return dishDto;
    }

    @Override
    public void updateWithFlavor(DishDto dishDto) {
        //  修改  dish信息
        updateById(dishDto);
        // 修改口味信息表  先根据菜品id 删除 所有口味
        LambdaQueryWrapper<DishFlavor> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(DishFlavor::getDishId,dishDto.getId());
        dishFlavorService.remove(wrapper);
        //再进行重新添加口味;
        List<DishFlavor> flavors = dishDto.getFlavors();
        //给每个口味添加id
        for (DishFlavor flavor : flavors) {
            //这步是添加口味表里的 菜品信息,这步骤不写,口味表里少一个字段
            flavor.setDishId(dishDto.getId());


        }

        //这步是批量添加口味    这步不写  口味表里不会变
        dishFlavorService.saveBatch(flavors);
    }

}
